package cn.chen.数据结构.链表;

// 该类就是一个双向链表的类
public class DoubleLinkedList {

    HeroNodeDouble head=new HeroNodeDouble(0,"","");

    // 添加节点的方法，添加到末尾
    public void addNode(HeroNodeDouble node){

        HeroNodeDouble temp=head;
        while (true){

            if(temp.next==null) {

                temp.next = node;
                node.pre = temp;
                break;
            }
            temp=temp.next;
        }
    }
    // 添加节点的方法，按照节点的no大小进行排序
    public void insertNode(HeroNodeDouble node){

        HeroNodeDouble temp=head;
        while(true){

            if(temp.next==null){

                temp.next=node;
                node.pre=temp;
                break;
            }
            if(temp.no<=node.no&&temp.next.no>node.no) {
                temp.next.pre = node;
                node.next = temp.next;
                node.pre=temp;
                temp.next=node;
                break;
            }
            temp=temp.next;
        }
    }
    // 删除节点
    public HeroNodeDouble removeNode(int no){

        if(isEmpty()){

            System.out.println("链表为空，没有要删除的元素");
            return null;
        }
        HeroNodeDouble temp=head.next;
        HeroNodeDouble remove=null;
        while(temp!=null){

            if(temp.no==no){

                remove=temp;
                temp.pre.next=temp.next;
                temp.next.pre=temp.pre;
            }
            temp=temp.next;
        }
        return remove;
    }
    // 修改节点
    public void updateNode(HeroNodeDouble node){

        if(isEmpty()){

            System.out.println("链表为空，没有要修改的元素");
            return;
        }
        HeroNodeDouble temp=head.next;
        while (temp!=null){

            if(temp.no==node.no){

                temp.name=node.name;
                temp.linkName=node.linkName;
            }
            temp=temp.next;
        }
    }
    // 遍历节点
    public void showNode(){

        if(isEmpty()){

            System.out.println("链表为空");
            return;
        }
        HeroNodeDouble temp=head.next;
        while(temp!=null){

            System.out.println(temp);
            temp=temp.next;
        }
    }
    public boolean isEmpty(){

        return head.next==null;
    }

}
